context("ggthemes")

skip_if_not_installed("ggplot2")

library(ggplot2)

test_that("works as expected with global ggthemes", {
  ggtheme <- theme_get()
  on.exit(theme_set(ggtheme), add = TRUE)
  theme_set(theme_void())
  thematic_on("black", "white", accent = NA, font = font_spec(scale = 1.5))
  expect_doppelganger("ggtheme-void", qplot(1:10))
  theme_set(theme_minimal())
  expect_doppelganger("ggtheme-minimal", qplot(1:10))
  thematic_off()
  expect_doppelganger("ggtheme-minimal-off", qplot(1:10))
})


test_that("works as expected with plot-specific themes", {
  thematic_on(bg = "#222222", fg = "white", accent = NA)
  p <- ggplot(mtcars, aes(wt, mpg)) +
    geom_point() +
    facet_wrap(~cyl)
  p <- p + theme(strip.background = element_rect(fill = "purple"))
  expect_doppelganger("purple-strip", p)

  p <- qplot(1:10) + theme(
    axis.text = element_text(colour = "red", size = 5),
    axis.text.x = element_text(size = 50)
  )
  expect_doppelganger("axis-interitance", p)

  p <- qplot(1:10) + theme(
    text = element_text(colour = "red", size = 5),
    axis.text.x.bottom = element_text(size = 50)
  )
  expect_doppelganger("axis-interitance-distant", p)
  expect_doppelganger("axis-interitance-distant2", last_plot())
})


test_that("Global ggthemes are respected", {

  p <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color =  Species)) +
    geom_point()

  with_ggtheme <- function(theme, expr) {
    old_theme <- theme_set(theme)
    on.exit(theme_set(old_theme), add = TRUE)
    thematic_with_theme(thematic_theme("black", "white", NA), expr)
  }

  # ggplot2 themes
  expect_doppelganger("bw", function() with_ggtheme(theme_bw(), p))
  expect_doppelganger("dark", function() with_ggtheme(theme_dark(), p))
  expect_doppelganger("minimal", function() with_ggtheme(theme_minimal(), p))
  expect_doppelganger("classic", function() with_ggtheme(theme_classic(), p))
  expect_doppelganger("light", function() with_ggtheme(theme_light(), p))
  expect_doppelganger("linedraw", function() with_ggtheme(theme_linedraw(), p))
  expect_doppelganger("void", function() with_ggtheme(theme_void(), p))

  # ggthemes
  skip_if_not_installed("ggthemes")
  ggthemes <- asNamespace("ggthemes")
  expect_doppelganger("wsj", function() with_ggtheme(ggthemes$theme_wsj(), p))
  expect_doppelganger("base", function() with_ggtheme(ggthemes$theme_base(), p))
  expect_doppelganger("solid", function() with_ggtheme(ggthemes$theme_solid(), p))
  expect_doppelganger("solarized", function() with_ggtheme(ggthemes$theme_solarized(), p))
  expect_doppelganger("economist", function() with_ggtheme(ggthemes$theme_economist(), p))
  expect_doppelganger("calc", function() with_ggtheme(ggthemes$theme_calc(), p))
  expect_doppelganger("fivethirtyeight", function() with_ggtheme(ggthemes$theme_fivethirtyeight(), p))
  expect_doppelganger("map", function() with_ggtheme(ggthemes$theme_map(), p))
  expect_doppelganger("excel", function() with_ggtheme(ggthemes$theme_excel(), p))
  expect_doppelganger("clean", function() with_ggtheme(ggthemes$theme_clean(), p))
  expect_doppelganger("excel_new", function() with_ggtheme(ggthemes$theme_excel_new(), p))
  expect_doppelganger("igray", function() with_ggtheme(ggthemes$theme_igray(), p))
  expect_doppelganger("foundation", function() with_ggtheme(ggthemes$theme_foundation(), p))
  expect_doppelganger("few", function() with_ggtheme(ggthemes$theme_few(), p))
  expect_doppelganger("pander", function() with_ggtheme(ggthemes$theme_pander(), p))
  expect_doppelganger("solarized_2", function() with_ggtheme(ggthemes$theme_solarized_2(), p))
  expect_doppelganger("gdocs", function() with_ggtheme(ggthemes$theme_gdocs(), p))
  expect_doppelganger("tufte", function() with_ggtheme(ggthemes$theme_tufte(), p))
  expect_doppelganger("par", function() with_ggtheme(ggthemes$theme_par(), p))
  expect_doppelganger("stata", function() with_ggtheme(ggthemes$theme_stata(), p))
  expect_doppelganger("hc", function() with_ggtheme(ggthemes$theme_hc(), p))
  skip_if_not_installed("dplyr")
  expect_doppelganger("economist_white", function() with_ggtheme(ggthemes$theme_economist_white(), p))

})
